package org.makumba.providers.query.mql;

/** Makumba adaptation of the original class in org.hibernate.hql.ast. 
 * No differences from the original, except package name.
 * */

/**
 * A custom token class for the HQL grammar.
 * <p>
 * <i>NOTE:<i> This class must be public becuase it is instantiated by the ANTLR library. Ignore any suggestions by
 * various code 'analyzers' about this class being package local.
 * </p>
 */
public class HqlToken extends antlr.CommonToken {
    /**
     * True if this token could be an identifier. *
     */
    private boolean possibleID = false;

    /**
     * The previous token type. *
     */
    private int tokenType;

    /**
     * Returns true if the token could be an identifier.
     * 
     * @return True if the token could be interpreted as in identifier, false if not.
     */
    public boolean isPossibleID() {
        return possibleID;
    }

    /**
     * Sets the type of the token, remembering the previous type.
     * 
     * @param t
     *            The new token type.
     */
    @Override
    public void setType(int t) {
        this.tokenType = getType();
        super.setType(t);
    }

    /**
     * Returns the previous token type.
     * 
     * @return int - The old token type.
     */
    private int getPreviousType() {
        return tokenType;
    }

    /**
     * Set to true if this token can be interpreted as an identifier, false if not.
     * 
     * @param possibleID
     *            True if this is a keyword/identifier, false if not.
     */
    public void setPossibleID(boolean possibleID) {
        this.possibleID = possibleID;
    }

    /**
     * Returns a string representation of the object.
     * 
     * @return String - The debug string.
     */
    @Override
    public String toString() {
        return "[\"" + getText() + "\",<" + getType() + "> previously: <" + getPreviousType() + ">,line=" + line
                + ",col=" + col + ",possibleID=" + possibleID + "]";
    }

}
